home *** CD-ROM | disk | FTP | other *** search
GW-BASIC | 1985-09-15 | 5.1 KB | 264 lines |
- 10 CLEAR 1000
- 20 PRINT "HIDDEN WORDS II"
- 30 RANDOMIZE
- 50 NU$="": REM No spaces between quotes
- 60 SL$=" ":REM One space between quotes
- 70 EC$=" ":REM One space between quotes
- 80 LC$="#"
- 90 QT$=CHR$(34): REM Double quote
- 100 INPUT "How many rows(1-50)";MR
- 110 INPUT "How many columns (1-50)";MC
- 120 IF MR<1 OR MR>50 OR MC<1 OR MC>50 THEN 100
- 130 NC=MR*MC
- 140 NW=0
- 150 READ WD$
- 160 IF WD$="/" THEN 190
- 170 NW=NW+1
- 180 GOTO 150
- 190 READ ND
- 200 DIM M$(MR,MC), RI(ND), CI(ND), SQ(NC), WD$(NW), WU(NW), WQ(NW)
- 210 RESTORE
- 220 FOR J=1 TO NW
- 230 READ WD$(J)
- 240 NEXT J
- 250 READ WD$
- 260 READ ND
- 270 FOR J=1 TO ND
- 280 READ RI(J),CI(J)
- 290 NEXT J
- 300 PRINT "Erasing the puzzle grid."
- 310 FOR J=1 TO MR
- 320 FOR K=1 TO MC
- 330 IF M$(J,K)<>EC$ THEN M$(J,K)=LC$
- 340 NEXT K
- 350 NEXT J
- 360 PRINT "Puzzle design menu"
- 370 PRINT " 1-Print current design"
- 380 PRINT " 2-Change design from keyboard"
- 390 PRINT " 3-Load new design from disk"
- 400 PRINT " 4-Save design to disk"
- 410 PRINT " 5-Generate a puzzle"
- 420 PRINT " 6-End"
- 430 INPUT CH
- 440 IF CH<1 AND CH>6 THEN 360
- 450 ON CH GOTO 460,510,720,880,1000,2480
- 460 GOSUB 2600:GOSUB 2700:REM Let user specify alternate output device & select it
- 470 MG$=NU$
- 480 GOSUB 2490
- 490 GOSUB 2800: REM Restore normal output device
- 500 GOTO 360
- 510 PRINT "Enter starting row (SR) and ending row (ER)"
- 520 PRINT "1 <= SR <=ER <=";MR
- 530 PRINT "(Enter 0,0 for Menu)"
- 540 INPUT SR,ER
- 550 IF ER=0 AND SR=0 THEN 360
- 560 IF SR<1 OR ER>MR OR ER<SR THEN 510
- 570 PRINT "Enter starting column (SC) and ending column (EC)"
- 580 PRINT "1 <= SC <= EC <=";MC
- 590 INPUT SC,EC
- 600 IF SC<1 OR EC>MC OR EC<SC THEN 570
- 610 PRINT "Fill area with: 1-blanks 2-letters"
- 620 INPUT "Select 1 or 2";BL
- 630 IF BL<>1 AND BL<>2 THEN 610
- 640 IF BL=1 THEN FC$=EC$
- 650 IF BL=2 THEN FC$=LC$
- 660 FOR J=SR TO ER
- 670 FOR K=SC TO EC
- 680 M$(J,K)=FC$
- 690 NEXT K
- 700 NEXT J
- 710 GOTO 510
- 720 FI$=NU$
- 730 LINE INPUT "Name the input file: ";FI$
- 740 IF FI$=NU$ THEN 360
- 750 OPEN "I",1,FI$
- 760 FOR J=1 TO MR
- 770 FOR K=1 TO MC
- 830 INPUT #1, M$(J,K)
- 840 NEXT K
- 850 NEXT J
- 860 CLOSE 1
- 870 GOTO 360
- 880 FO$=NU$
- 890 LINE INPUT "Name the output file: ";FO$
- 900 IF FO$=NU$ THEN 360
- 910 OPEN "O",1,FO$
- 920 FOR J=1 TO MR
- 930 FOR K=1 TO MC
- 940 PRINT #1,QT$;M$(J,K);QT$
- 950 NEXT K
- 960 NEXT J
- 970 CLOSE 1
- 980 PRINT "The design is stored in disk file ";FO$
- 990 GOTO 360
- 1000 PRINT "Sorting the word list"
- 1010 FOR J=1 TO NW
- 1020 WQ(J)=J
- 1030 NEXT J
- 1040 SF=0
- 1050 FOR J=1 TO NW-1
- 1060 IF LEN(WD$(WQ(J))) >=LEN(WD$(WQ(J+1))) THEN 1110
- 1070 T=WQ(J)
- 1080 WQ(J)=WQ(J+1)
- 1090 WQ(J+1)=T
- 1100 SF=1
- 1110 NEXT J
- 1120 IF SF=1 THEN 1040
- 1130 PRINT "Shuffling the cell numbers"
- 1140 FOR J=1 TO NC
- 1150 SQ(J)=0
- 1160 NEXT J
- 1170 FOR J=1 TO NC
- 1180 Q=INT(RND(1)*NC)+1
- 1190 IF SQ(Q) <>O THEN 1180
- 1200 SQ(Q)=J
- 1210 NEXT J
- 1220 FOR J=1 TO NW
- 1230 WU(J)=-1
- 1240 NEXT J
- 1250 PRINT "Filling in the puzzle"
- 1260 P=1
- 1270 QP=0
- 1280 WA=NW
- 1290 DI=INT(RND(1)*ND)+1
- 1300 PRINT "Pass #";P
- 1310 QP=QP+1
- 1320 NF=1
- 1330 CP=SQ(QP)
- 1340 CR=INT((CP-1)/MC)+1
- 1350 CC=CP-(CR-1)*MC
- 1360 IF M$(CR,CC)=EC$ OR (P=2 AND M$(CR,CC)=LC$) THEN 1880
- 1370 IF WA<>0 THEN 1410
- 1380 PRINT
- 1390 PRINT "Used all the words"
- 1400 GOTO 2110
- 1410 Q=1
- 1420 W=WQ(Q)
- 1430 W$=WD$(W)
- 1440 WL=LEN(W$)
- 1450 DK=1
- 1460 RX=CR+(WL-1)*RI(DI)
- 1470 CX=CC+(WL-1)*CI(DI)
- 1480 IF RX<1 OR RX>MR OR CX<1 OR CX>MC THEN 1800
- 1490 NF=0
- 1500 PR=CR
- 1510 PC=CC
- 1520 FOR L=1 TO WL
- 1530 T$=M$(PR,PC)
- 1540 IF T$=EC$ THEN 1580
- 1550 IF T$=LC$ THEN 1600
- 1560 L$=MID$(W$,L,1)
- 1570 IF L$=T$ THEN 1600
- 1580 L=WL
- 1590 NF=1
- 1600 PR=PR+RI(DI)
- 1610 PC=PC+CI(DI)
- 1620 NEXT L
- 1630 IF NF=1 THEN 1800
- 1640 PR=CR
- 1650 PC=CC
- 1660 FOR L=1 TO WL
- 1670 M$(PR,PC)=MID$(W$,L,1)
- 1680 PR=PR+RI(DI)
- 1690 PC=PC+CI(DI)
- 1700 NEXT L
- 1710 IF Q=WA THEN 1750
- 1720 FOR J=Q TO WA-1
- 1730 WQ(J)=WQ(J+1)
- 1740 NEXT J
- 1750 WA=WA-1
- 1760 WU(W)=(DI-1)*NC+CP-1
- 1770 DI=DI+1
- 1780 IF DI>ND THEN DI=1
- 1790 GOTO 1880
- 1800 IF DK=ND THEN 1850
- 1810 DK=DK+1
- 1820 DI=DI+1
- 1830 IF DI>ND THEN DI=1
- 1840 GOTO 1460
- 1850 IF Q=WA THEN 1880
- 1860 Q=Q+1
- 1870 GOTO 1420
- 1880 IF NF=1 THEN PRINT "C";
- 1890 IF NF=0 THEN PRINT "W";
- 1900 IF QP=NC THEN 2060
- 1910 GOTO 1310
- 1915 K$=INKEY$
- 1920 IF K$=NU$ THEN 1310
- 1930 PRINT "Puzzle-in-Progress Menu"
- 1940 PRINT "1-Continue 2-Show puzzle"
- 1950 PRINT "3-Show unused words 4-Random fill"
- 1960 INPUT CH
- 1970 IF CN<1 AND CH>4 THEN 1940
- 1980 ON CH GOTO 1310,1990,2020,2110
- 1990 MG$=NU$
- 2000 GOSUB 2490
- 2010 GOTO 1940
- 2020 FOR JJ=1 TO NW
- 2030 IF WU(JJ)=-1 THEN PRINT WD$(JJ)
- 2040 NEXT JJ
- 2050 GOTO 1940
- 2060 PRINT
- 2070 IF P=2 THEN 2110
- 2080 P=2
- 2090 QP=0
- 2100 GOTO 1300
- 2110 PRINT "Filling in the empty cells at random"
- 2120 FOR CR=1 TO MR
- 2130 FOR CC=1 TO MC
- 2140 IF M$(CR,CC)<>LC$ THEN 2160
- 2150 M$(CR,CC)=CHR$(INT(RND*26)+65)
- 2160 NEXT CC
- 2170 NEXT CR
- 2180 PRINT
- 2190 PRINT "Puzzle completed."
- 2200 PRINT
- 2210 GOSUB 2600: REM Ask user to specify output device
- 2220 INPUT "Press RETURN when ready to print";D$
- 2230 GOSUB 2700: REM Select alternate output device
- 2240 MG$=SL$
- 2250 GOSUB 2490
- 2260 PRINT
- 2270 GOSUB 2800: REM Restore normal output device
- 2280 INPUT "Press return for hidden word directory ";D$
- 2290 GOSUB 2700: REM Select alternate output device
- 2300 PRINT
- 2310 PRINT "The hidden words are:"
- 2320 PRINT "Word"; TAB(20); "Row"; TAB(26); "Col."; TAB(32); "Direction"
- 2330 FOR J=1 TO NW
- 2340 IF WU(J)=-1 THEN 2400
- 2350 DI=INT(WU(J)/NC)+1
- 2360 CP=WU(J)-(DI-1)*NC+1
- 2370 CR=INT((CP-1)/MC)+1
- 2380 CC=CP-(CR-1)*MC
- 2390 PRINT WD$(J); TAB(20); CR; TAB(26); CC; TAB(32); DI
- 2400 NEXT J
- 2410 PRINT
- 2420 GOSUB 2800: REM Restore normal output device
- 2430 PRINT
- 2440 PRINT "Puzzle generation menu"
- 2450 INPUT "Select: 1-Reprint 2-New Puzzle 3-End ";CH
- 2460 IF CH<1 AND CH>3 THEN 2450
- 2470 ON CH GOTO 2200,300,2480
- 2480 SYSTEM
- 2490 FOR TR=1 TO MR
- 2500 FOR TC=1 TO MC
- 2510 PRINT M$(TR,TC);MG$;
- 2520 NEXT TC
- 2530 PRINT
- 2540 NEXT TR
- 2550 RETURN
- 2600 INPUT "OUTPUT TO 1-CRT 2-PRINTER";DV
- 2610 IF DV<1 OR DV>2 THEN 2600
- 2620 RETURN
- 2700 IF DV=2 THEN PRINT CHR$(16);
- 2710 RETURN
- 2800 IF DV=2 THEN PRINT CHR$(16);
- 2810 RETURN
- 5000 DATA KIRK, TEDDY, MATTHEW, BILL, GINI
- 5010 DATA PAT, MIKE, SAM, MERF, FRISKY, CURIOUS
- 5020 DATA PACKWOOD, JOSEPH, DAVID, MARY, WILLIAM, THEODORE
- 5030 DATA /
- 6000 DATA 8
- 6010 DATA 0,1, 1,1, 1,0, 1,-1, 0,-1, -1,-1, -1,0, -1,1
-